/**
 * 税费计算
 * 增值税 —— 普通住宅 —— <5年： 卖出价/1.05*5%
 * 增值税 —— 普通住宅 —— >=5年：免征
 * 增值税 —— 非普通住宅 —— <5年：卖出价/1.05*5
 * 增值税 —— 非普通住宅 —— >=5年：(卖出价-买入价)/1.05*5
 * 增值税及附加税 —— 普通住宅 —— <5年：卖出价/1.05*5.3
 * 增值税及附加税 —— 普通住宅 —— >=5年：免征
 * 增值税及附加税 —— 非普通住宅 —— <5年：卖出价/1.05*5.3
 * 增值税及附加税 —— 非普通住宅 —— >=5年：(卖出价-买入价)/1.05*5.3
 * 
*/

/**
 * @desc 计算增值税
 * @param hasFuJia {Boolean} true增值附加税 false增值税
 * @param {Boolean} overTwoYears 转让是否满足两年
 * @param sellPrice {Number} 卖出价
 * @param buyPrice {Numer} 买入价
 * @return {Number} 返回增值税费
*/
export async function calcZengTaxes({hasFuJia = true, overTwoYears, sellPrice}) {
    const TAX_RATIO = 1/1.05*5/100;
    const TAX_RATIO_FUJIA = 1/1.05*5.3/100;
    const ratio = hasFuJia ? TAX_RATIO_FUJIA : TAX_RATIO;

    if(overTwoYears || !sellPrice) {
        return 0
    }

    return parseFloat((sellPrice * ratio).toFixed(2))
}

/**
 * 个人所得税费计算
 * @param isOnlyOne {Boolean} 是否唯一住宅
 * @param isFiveYears {Boolean} 转让是否五年之内
 * @param sellPrice {Number} 售价
 * @param buyPrice {Number} 买入价格
*/
export async function calcGeRenTaxes(info) {
    const { isOnlyOne, isFiveYears, sellPrice } = info;

    if((!isFiveYears && isOnlyOne) || !sellPrice){
        return 0
    }

    // const zengZhiTaxes = await calcZengTaxes({
    //     ...info,
    //     hasFuJia: false
    // });

    return parseFloat((sellPrice / 100).toFixed(2))
}

/**
 * 契税计算
 * @param isFirst {Bool} 是否首套
 * @param {Boolean} overTwoYears 转让是否满足两年
 * @param size {Number} 房屋面积
 * @param sellPrice {Number} 房屋总价
 * @param buyPrice {Numer} 买入价
 * @return {Number} 返回契税税费
*/
export async function qiTaxes(info) {
    const { isFirst, size, sellPrice } = info;
    if(!size || !sellPrice) {
        return 0
    }

    const tax = (size <= 140 ? 0.01 : (isFirst ? 0.015 : 0.02));

    // const zengZhiTaxes = await calcZengTaxes({
    //     ...info,
    //     hasFuJia: false
    // });

    return parseFloat((tax*sellPrice).toFixed(2))
}

/**
 * 维修基金计算
 * 房屋成本价=1295
 * 有电梯：房屋成本价 X 3% X 建筑面积
 * 无电梯：房屋成本价 X 2% X 建筑面积
 * @param hasLift {Boolean} 是否有电梯
 * @param size {Number} 房屋面积
*/
export function weiXiuTaxes({ hasLift, size }) {
    const houseChengBen = 1295;
    const listRatio = hasLift ? 3 : 2;
    return (houseChengBen*listRatio*size)/100;
}

/**
 * 保留小数点后几位，不四舍五入，小数点精度
 * @param num {number} 小数点数字
 * @param digits {number} 小数点后几位 
 * @return {number} 精度之后的小数点
*/
export function truncateDecimals(num, digits) {
    let multiplier = Math.pow(10, digits);
    return Math.floor(num * multiplier) / multiplier;
    
}
